Метки полей формы — Yii2

По умолчанию, метки полей формы автоматически генерируются из названия поля. Генерация выполняется методом generateAttributeLabel() класса yii\base\Model. Он преобразует первую букву каждого слова в верхний регистр, если имена переменных состоят из нескольких слов. Например, username станет Username, а firstName станет First Name.

Если такой вариант не устраивает, нужно переопределить метод yii\base\Model::attributeLabels():

namespace app\models;
use yii\base\Model;

class FeedbackForm extends Model
{
    public $name;
    public $email;
    public $body;

    public function attributeLabels() {
        return [
            'name' => 'Ваше имя',
            'email' => 'Адрес почты',
            'body' => 'Ваше сообщение',
        ];
    }
}

Теперь при создании формы в шаблоне, метки задавать не нужно:

<h1><?= Html::encode($this->title) ?></h1>

<?php $form = ActiveForm::begin(['id' => 'feedback-form']); ?>
    <?= $form->field($model, 'name')->textInput()->label('Ваше имя'); ?>
    <?= $form->field($model, 'email')->input('email')->label('Адрес почты'); ?>
    <?= $form->field($model, 'body')->textarea(['rows' => 5])->label('Ваше сообщение'); ?>
    <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']); ?>
<?php ActiveForm::end(); ?>
<h1><?= Html::encode($this->title) ?></h1>

<?php $form = ActiveForm::begin(['id' => 'feedback-form']); ?>
    <?= $form->field($model, 'name')->textInput(); ?>
    <?= $form->field($model, 'email')->input('email'); ?>
    <?= $form->field($model, 'body')->textarea(['rows' => 5]); ?>
    <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']); ?>
<?php ActiveForm::end(); ?>

Интернационализация

namespace app\models;
use yii\base\Model;

class FeedbackForm extends Model
{
    public $name;
    public $email;
    public $body;

    public function attributeLabels() {
        return [
            'name' => \Yii::t('app', 'Your name'),
            'email' => \Yii::t('app', 'Your email'),
            'body' => \Yii::t('app', 'Your message'),
        ];
    }
}
<?php
/*
 * Файл config/web.php
 */
$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    // язык перевода — русский
    'language' => 'ru-RU',
    'components' => [
        /* ... */
        'i18n' => [
            'translations' => [
                'app*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    // все переводы будут в файле messages/ru_RU/app.php
                    'fileMap' => [
                        'app' => 'app.php',
                    ],
                ],
            ],
        ],
    ],
    /* ... */
];
<?php
/*
 * Файл messages/ru_RU/app.php
 */
return [
    'Your name'    => 'Ваше имя',
    'Your email'   => 'Ваш адрес почты',
    'Your message' => 'Ваше сообщение',
    'Submit'       => 'Отправить',
];
<h1><?= Html::encode($this->title) ?></h1>

<?php $form = ActiveForm::begin(['id' => 'feedback-form']); ?>
    <?= $form->field($model, 'name')->textInput(); ?>
    <?= $form->field($model, 'email')->input('email'); ?>
    <?= $form->field($model, 'body')->textarea(['rows' => 5]); ?>
    <?= Html::submitButton(\Yii::t('app', 'Submit'), ['class' => 'btn btn-primary']);?>
<?php ActiveForm::end(); ?>

Leave a Comment